const multer = require('multer');
const path = require('path');
const Image = require('../models/Image');

// 设置存储位置和文件命名规则
const storage = multer.diskStorage({
  destination: function(_, __, cb) {
    cb(null, 'uploads/'); // 确保此目录存在或由程序自动创建
  },
  filename: function(_, file, cb) {
    try {
      // 尝试对文件名进行解码
      const buffer = Buffer.from(file.originalname, 'latin1');
      const decodedName = buffer.toString('utf-8');
      // const decodedName = decodeURIComponent(encodeURIComponent(file.originalname));
      console.log('decodedName...', decodedName, file.originalname);
      cb(null, `${Date.now()}-${decodedName}`);
    } catch (error) {
      console.log('出错时使用原始文件名...');
      // 出错时使用原始文件名
      cb(null, `${Date.now()}-${file.originalname}`);
    }
  }
});

const upload = multer({ storage: storage });

// 修正语法错误，正确组合中间件
exports.uploadImage = [
  upload.single('image'),
  async (req, res) => {
    // console.log("上传图片22：", req);
    try {
      if (!req.file) {
        return res.status(400).send({
          status: 400,
          msg: 'No image uploaded.'
        });
      }
      console.log("上传文件：", req.file);

      // 构建可访问的图片URL
      let imageUrl = `image-server/uploads/${encodeURIComponent(req.file.filename)}`;
      console.log("获取图片：", {
        status: 200, // 注意：值是数字，不能是字符串
        data: {
          "url": imageUrl, // 图片 src ，必须
        }
      });
      res.send({
        status: 200, // 注意：值是数字，不能是字符串
        data: {
          "url": imageUrl, // 图片 src ，必须
        }
      });
    } catch (error) {
      console.error('上传图片出错:', error);
      res.status(500).send({
        status: 500, // 只要不等于 0 就行
        msg: error.message
      });
    }
  }
];

exports.getImages = async (req, res) => {
  try {
    const images = await Image.getAll();
    console.log("获取图片列表：", images);

    const baseUrl = ''; // 你的服务器基础URL

    images.forEach(image => {
      // 如果需要处理跨平台的路径分隔符问题，可以先标准化路径
      filename = path.basename(path.normalize(image.filepath)); // 确保正确处理不同平台的路径分隔符
      // 构建可访问的图片URL
      let imageUrl = `${baseUrl}/uploads/${encodeURIComponent(filename)}`;
      image.url = imageUrl;
    });
    res.json(images);
  } catch (error) {
    console.error('获取图片列表出错:', error);
    res.status(500).send({
      status: 500,
      msg: error.message
    });
  }
};